<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>t88合并两个有序数组</title>
</head>
<body>

</body>
</html>
<script>
    /**
     * @param {number[]} nums1
     * @param {number} m
     * @param {number[]} nums2
     * @param {number} n
     * @return {void} Do not return anything, modify nums1 in-place instead.
     */

    // 法一:先合并后排序

    // let merge = function(nums1, m, nums2, n) {
    //     nums1.splice(m,n)
    //     for(let i = 0;i<n;i++){
    //         nums1.push(nums2[i])
    //     }
    //     nums1.sort((a,b)=>a-b)
    // };

    //法二: 双指针
    let merge = function(nums1, m, nums2, n) {
            let nums1_copy = nums1.slice(0, m); // 正确复制nums1的前m个元素
            let p1 = 0, p2 = 0;
            let index = 0;

            while (p1 < m && p2 < n) {
                if (nums1_copy[p1] <= nums2[p2]) {
                    nums1[index++] = nums1_copy[p1++];
                } else {
                    nums1[index++] = nums2[p2++];
                }
            }

            // 处理剩余元素
            while (p1 < m) {
                nums1[index++] = nums1_copy[p1++];
            }
            while (p2 < n) {
                nums1[index++] = nums2[p2++];
            }
        };
</script>